Розробили: проф. Сидоренко В.В., викл. Дóренський О.П., 2006-2011
Лабораторна робота № 1
ТЕМА: Використання системного програмування в реальному режимі роботи центрального процесора для визначення конфігурації ПК IBM PC.
МЕТА: Ознайомитись з основами системного програмування, навчитись програмним шляхом одержувати інформацію про системні характеристики ПК типу IBM PC.
Короткі теоретичні відомості
Системна інформація про комп’ютер зберігається у зарезервованих комірках пам’яті, які завантажуються в молодші 640 Кб адресного простору ОЗП та використовуються системними та прикладними програмами під час роботи ПК.
Розглянемо спрощену схему розподілу пам’яті у реальному режимі (таблиця 1.1).
Таблиця 1.1 – Розподіл пам’яті у реальному режимі
Адреса
Значення
FFFFFF
ПЗП BIOS
F0000
Зарезервовано
C0000
Текстовий відеобуфер
B8000
Графічний відеобуфер
A0000
Область для завантаження транзитних програм (додатків користувача)
Резидентна частина командного процессора
Ядро системи MS DOS
Драйвера пристроїв
00400
Область даних BIOS і DOS
00000
Таблиця векторів переривань
У молодших адресах пам’яті розміщується ядро ОС, перші 1024 байта якої займає таблиця векторів переривань. Кожен елемент цієї таблиці – 32-розрядна адреса підпрограми-обробника переривання (згадайте цю тему з “Мікропроцесорних ВІС”), яка задана у форматі
[сегмент] : [зміщення]
і називається вектором переривань. Ці адреси використовуються CPU виклику підпрограми обробки апаратних та програмних переривань.
Після таблиці векторів переривань розміщено велику ділянку оперативної пам’яті, яка використовується як область даних BIOS та операційної системи (ОС).
Наступні 640 Кбайт ОЗП – область пам’яті, у якій знаходяться драйвери пристроїв ОС. Вони забезпечують керування введенням/виведенням для більшості стандартних пристроїв (наприклад, для клавіатури, дискових накопичувачів, відео адаптера, послідовного та паралельного інтерфейсів).
Як відомо, існує багато моделей ПК IBM PC: Оригінальний IBM PC, ХТ, АТ, PCjr, Compag XT, Sperry PC і ін. Є три способи визначення моделі та отримання деякої інформації про конфігурацію комп’ютера:
прочитати дану інформацію з комірок ПЗП BIOS;
викликати одну з функцій переривання 15h, яка повертає адресу таблиці конфігурації;
за допомогою системної утиліти debug (дебагер).
Спосіб 1. У постійній пам’яті BIOS за адресою F000:FFFE міститься байт, значення якого є ідентифікацією типу комп’ютера (див. таблицю 1.2). За адресою F000:FFF5 міститься дата виготовлення BIOS, яка записана у коді ASCII в американському форматі (MM/DD/YY – місяць/день/рік) та займає 8 байт.
Таблиця 1.2 – Значення байту ідентифікації типу ПК
Код
Тип комп’ютера
FF
Оригінальний IBM PC
FE
XT, Portable PC
FD
PCjr
FC
AT
FB
XT з пам’яттю 640К на материнській платі
FA
PS/2 модель 25 або 30
F9
Convertible PC
F8
PS/2 моделі 55SX,70,80
9A
Compag XT, Compag Plus
30
Sperry PC
2D
Compag PC, Compag Deskpro
Для читання вмісту даної комірки області пам’яті BIOS можна використати стандартну функцію TC peekb():
unsigned char Val = peekb(Seg, Offset) ,
де параметр Seg – значення сегменту, Offset – зміщення.
Приклад використання способу 1 наведено в лістингу 1.1.
Лістинг 1.1 – Програма одержання коду типу ПК ІВМ РС.
#include <stdio.h>
#include <conio.h>
int main (void)
{
unsigned char KOD;
KOD = peekb(0xF000,0xFFFE);
printf("Код типу комп’ютера: %xh\n", KOD);
return 0;
}
Спосіб 2. Більш детальну інформацію можна отримати, викликавши функцію C0h переривання BIOS INT 15h. Для генерації цього переривання необхідно:
на вході: АН=C0h
{виклик переривання}
на виході: ES:BX = адреса таблиці конфігурації
CF = 0, якщо виклик переривання пройшов успішно
CF = 1, якщо дана версія BIOS не підтримує виконання функції C0h.
Після виконання переривання регістри ES:BX будуть вказувати на таблицю в області ПЗП BIOS, значення якої наведено у таблиці 1.3.
Таблиця 1.3 – Таблиця ПЗП BIOS ідентифікації комп...